Skip to content

feat: Add EV Charger control ❘ Deye 3P#1065

Open
DJm00n wants to merge 1 commit into
davidrapan:mainfrom
DJm00n:feat/deye-evse
Open

feat: Add EV Charger control ❘ Deye 3P#1065
DJm00n wants to merge 1 commit into
davidrapan:mainfrom
DJm00n:feat/deye-evse

Conversation

@DJm00n

@DJm00n DJm00n commented May 12, 2026

Copy link
Copy Markdown

Adds a new "EV Charger" group to the Deye 3P profile based on the Deye Hybrid Inverter Modbus RTU V105.4 specification (https://github.com/user-attachments/files/26004301/Deye.hybrid.inverter.MODBUS.RTU.V105.4-20240813.pdf).
Profile (deye_p3.yaml) — new group "EV Charger":

  • EV Charger Power Mode (register 0x0103, bits[1:0]): Solar Only / Free Work
  • EV Charger Inverter Connection Port (register 0x0103, bits[5:4]): Grid Port / Load Port
  • EV Charger Off-Grid SOC (register 0x0103, hi-byte): minimum battery SOC threshold for off-grid charging, read-modify-write via mask + divide
  • EV Charger Maximum Power (register 0x0104): inverter-side power cap (0–22000 W)
  • EV Charger Requested Power Limit (register 0x02C5): live power limit sent to the EVSE by the inverter, update_interval: 5

Platform fixes:

  • select.py: read-modify-write for mask (top-level, not display.mask) — reads current register, clears masked bits, ORs in new value before writing; triggers coordinator refresh after masked writes
  • number.py: same read-modify-write pattern for number entities with mask and divide (used by Off-Grid SOC); fixes value_int overflow check (>= 0xFFFF → <= 0xFFFF)
  • entity.py: trigger async_request_refresh after write when entity has a mask, so dependent sensors update immediately
image image

@DJm00n

DJm00n commented May 12, 2026

Copy link
Copy Markdown
Author

@davidrapan can you please take a look?

@DJm00n DJm00n force-pushed the feat/deye-evse branch 2 times, most recently from 4f7f005 to 216db0f Compare May 25, 2026 13:32
Adds EV Charger configuration and monitoring to the Deye 3-phase inverter
profile (deye_p3.yaml), with supporting read-modify-write fixes in the
select and number entity platforms.

Profile (deye_p3.yaml) — new group "EV Charger":
- EV Charger Power Mode (register 0x0103, bits[1:0]): Solar Only / Free Work
- EV Charger Inverter Connection Port (register 0x0103, bits[5:4]): Grid Port / Load Port
- EV Charger Off-Grid SOC (register 0x0103, hi-byte): minimum battery SOC
  threshold for off-grid charging, read-modify-write via mask + divide
- EV Charger Maximum Power (register 0x0104): inverter-side power cap (0–22000 W)
- EV Charger Requested Power Limit (register 0x02C5): live power limit sent
  to the EVSE by the inverter, update_interval: 5

Platform fixes:
- select.py: read-modify-write for `mask` (top-level, not display.mask) —
  reads current register, clears masked bits, ORs in new value before writing;
  triggers coordinator refresh after masked writes
- number.py: same read-modify-write pattern for number entities with `mask`
  and `divide` (used by Off-Grid SOC); fixes value_int overflow check
  (>= 0xFFFF → <= 0xFFFF)
- entity.py: trigger async_request_refresh after write when entity has a mask,
  so dependent sensors update immediately

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant